const bcrypt = require('bcrypt');
const config = require('../config/defaults');

/**
 * 密码加密模块
 * @module bcrypt
 */
module.exports = {
  /**
   * 加密密码
   * @param {string} plainPassword - 明文密码
   * @returns {Promise<string>} 加密后的密码哈希
   */
  hashPassword: async function(plainPassword) {
    if (!plainPassword || typeof plainPassword !== 'string') {
      throw new Error('密码必须是字符串类型');
    }
    const saltRounds = config.bcrypt?.saltRounds || 10; // 从配置读取成本参数，默认10
    return bcrypt.hash(plainPassword, saltRounds);
  },

  /**
   * 验证密码
   * @param {string} plainPassword - 明文密码
   * @param {string} hashedPassword - 加密后的密码哈希
   * @returns {Promise<boolean>} 验证结果
   */
  verifyPassword: async function(plainPassword, hashedPassword) {
    if (!plainPassword || !hashedPassword) {
      throw new Error('密码和哈希值不能为空');
    }
    return bcrypt.compare(plainPassword, hashedPassword);
  }
};